package org.example.mqstream.helloworld;

import com.rabbitmq.stream.ByteCapacity;
import com.rabbitmq.stream.Consumer;
import com.rabbitmq.stream.Environment;
import com.rabbitmq.stream.OffsetSpecification;

import java.io.IOException;

public class Receive {

    /**
     * 主程序入口
     * 本程序演示了如何连接到一个远程消息队列服务器，创建一个消息流，并消费该流中的消息
     *
     * @param args 命令行参数
     * @throws IOException 当标准输入读取操作失败时抛出
     */
    public static void main(String[] args) throws IOException {
        // 构建连接远程消息队列服务器所需的环境配置
        Environment environment = Environment.builder()
                .host("192.168.0.228")  // 指定远程服务器IP
                .port(5552)              // 可选：指定流端口，默认是5552
                .username("mq")
                .password("123456")
                .build();
        // 定义要操作的消息流名称
        String stream = "hello-java-stream";
        // 创建一个消息流，指定其最大长度为5GB
        environment.streamCreator().stream(stream).maxLengthBytes(ByteCapacity.GB(5)).create();

        // 构建一个消费者，指定消费的消息流和起始偏移量，并定义消息处理逻辑
        Consumer consumer = environment.consumerBuilder()
                .stream(stream)
                .offset(OffsetSpecification.first())
                .messageHandler((unused, message) -> {
                    System.out.println("Received message: " + new String(message.getBodyAsBinary()));
                }).build();

        // 等待用户按下回车键后关闭消费者和环境连接
        System.out.println(" [x]  Press enter to close the consumer...");
        System.in.read();
        consumer.close();
        environment.close();
    }

}
